package cn.tedu.adminsystem.webapi.controller;

import cn.tedu.community.commons.pojo.forum.vo.ForumListItemVO;
import cn.tedu.community.commons.pojo.forum.vo.ForumStandardVO;
import cn.tedu.community.commons.restful.JsonPage;
import cn.tedu.community.commons.restful.JsonResult;
import cn.tedu.epidemic.service.ForumService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.hibernate.validator.constraints.Range;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;


@RestController
@Api(tags = "论坛控制器")
@Slf4j
@Validated
@RequestMapping("/forum")
public class ForumController {

    @DubboReference
    private ForumService DubboForumService;

    @PreAuthorize("hasAnyAuthority('/com/topic/update')")
    @ApiOperation("修改论坛审核状态")
    @PostMapping("/{id:[0-9]+}/{status:[0-9]+}")
    public JsonResult<Void> updateAuditStatus(@PathVariable Long id,@Range(min = 0,max = 2,message = "状态码违规！")
                                              @PathVariable Integer status) {
        log.debug("控制层开始处理修改论坛审核状态，论坛id是：{}，状态码是：{}", id, status);
        DubboForumService.updateAuditStatus(id, status);
        return JsonResult.ok();
    }

    @PreAuthorize("hasAnyAuthority('/com/topic/read')")
    @GetMapping("/{isLogin}/{id:[0-9]+}/select")
    @ApiOperation("查询论坛详情")
    public JsonResult<ForumStandardVO> getStandardById(@PathVariable String isLogin,
                                                       @PathVariable Long id) {
        log.debug("控制层开始处理查询论坛详情，id是：{}，判断是否已登录的用户名是：{}", id,isLogin);
        ForumStandardVO standardVO = DubboForumService.getStandardById(isLogin,id);
        return JsonResult.ok(standardVO);
    }

    @PreAuthorize("hasAnyAuthority('/com/topic/read')")
    @GetMapping("/page/{page:[0-9]+}/{pageSize:[0-9]+}")
    @ApiOperation("分页查询所有论坛")
    public JsonResult<JsonPage<ForumListItemVO>> pageForum(@PathVariable Integer page,
                                                           @PathVariable Integer pageSize){
        log.debug("控制层开始处理分页查询所有论坛，page是：{}，pageSize是：{}",page,pageSize);
        JsonPage<ForumListItemVO> jsonPage = DubboForumService.forumListByPage(page, pageSize);
        log.debug("分页查询所有论坛，数据是：{}",jsonPage);
        return JsonResult.ok(jsonPage);
    }

    @PreAuthorize("hasAnyAuthority('/com/topic/read')")
    @GetMapping("/{page:[0-9]+}/{pageSize:[0-9]+}/ListUnaudited")
    @ApiOperation("查询全部未审核论坛")
    public JsonResult<JsonPage<ForumListItemVO>> ListUnaudited(@PathVariable Integer page,
                                                           @PathVariable Integer pageSize){
        log.debug("控制层开始处理查询全部未审核论坛，page是：{}，pageSize是：{}",page,pageSize);
        JsonPage<ForumListItemVO> jsonPage = DubboForumService.ListUnaudited(page, pageSize);
        log.debug("查询全部未审核论坛，数据是：{}",jsonPage);
        return JsonResult.ok(jsonPage);
    }

    @PreAuthorize("hasAnyAuthority('/com/topic/read')")
    @GetMapping("/{page:[0-9]+}/{pageSize:[0-9]+}/ListAudited")
    @ApiOperation("查询全部已审核论坛（包括违规）")
    public JsonResult<JsonPage<ForumListItemVO>> ListAudited(@PathVariable Integer page,
                                                               @PathVariable Integer pageSize){
        log.debug("控制层开始处理查询全部已审核论坛（包括违规），page是：{}，pageSize是：{}",page,pageSize);
        JsonPage<ForumListItemVO> jsonPage = DubboForumService.ListAudited(page, pageSize);
        log.debug("查询全部已审核论坛（包括违规），数据是：{}",jsonPage);
        return JsonResult.ok(jsonPage);
    }

}
